var MongoClient = require('mongodb').MongoClient;
//服务器配置
var DB_CONN_STR = 'mongodb://root:root@123.56.136.124:27027/cfw';
//var DB_CONN_STR = 'mongodb://cfw:jfb009@dds-2zed30b392e2c8c41.mongodb.rds.aliyuncs.com:3717,dds-2zed30b392e2c8c42.mongodb.rds.aliyuncs.com:3717/cfw?replicaSet=mgset-3523689';
//var DB_CONN_STR = 'mongodb://root:root@localhost:27027/cfw';
var db;
var Ut = {};


//配置参数
var option = {
    db: {
        native_parser: false
    },
    server: {
        poolSize: 20,
        socketOptions: {
            keepAlive: 1,
            connectTimeoutMS: 500,//可以打开连接的时间
            waitQueueTimeoutMS : 30000//在超时之前，线程等待连接生效的总时间。如果连接池到达最大并且所有的连接都在使用，这个参数就生效了。
        }/*,
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        }*/
    },
    replSet: {
        poolSize: 20,
        socketOptions: {
            keepAlive: 1,
            connectTimeoutMS: 500,//可以打开连接的时间
            waitQueueTimeoutMS : 30000//在超时之前，线程等待连接生效的总时间。如果连接池到达最大并且所有的连接都在使用，这个参数就生效了。
        }
    },
    mongos: {},
    agent: false
}

//连接池初始化，默认创建5个连接
MongoClient.connect(DB_CONN_STR, option, function (err, database) {
    if (err) throw err;
    db = database;

});


/**
 **    查询
 **    cName    collection的名称（table）
 **    param    查询条件
 **/
Ut.query = function (cName, param, callback) {
    var collection = db.collection(cName);
    collection.find(param).toArray(function (err, res) {
        callback(err, res);
    })

}

Ut.queryStort = function (cName, param, sorts, callback) {
    var collection = db.collection(cName);
    collection.find(param).sort(sorts).toArray(function (err, res) {
        callback(err, res);
    })

}

/**
 * 根据项目的地址编辑项目信息
 * @param cName
 * @param param
 * @param callback
 */
Ut.saveByProjHref = function (cName, param, callback) {
    var collection = db.collection(cName);
    for (var i = 0; i < param.length; i++) {
        var selectVar = {
            PROJ_HREF: param[i].PROJ_HREF
        };
        collection.update(selectVar, {$set: param[i]}, {upsert: true})
    }
    callback(null, param);
}

/**
 **    插入或更新(根据项目的地址判断新增或编辑)
 **    param    插入对象
 **/
Ut.saveObject = function (cName, param, num, callback) {
    var collection = db.collection(cName);
    var selectVar = {};
    if(num == 0){
        selectVar.PROJ_HREF = param.PROJ_HREF
    }
    if(num == 1){
        selectVar.urlPDF = param.urlPDF
    }
    collection.update(selectVar, {$set: param}, {upsert: true}, function (err, res) {
        //callback(err, res);
    })
}

/**
 * 根绝id删除表中的数据
 * @param cName
 * @param param
 * @param callback
 */
Ut.removeById = function (cName, param) {
    var collection = db.collection(cName);
    var selectVar = {
        _id: param._id
    }
    collection.remove(selectVar)
}


module.exports = Ut;